package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceCode;
import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.BrandCategoryMapper;
import cn.tedu.csmall.product.mapper.BrandMapper;
import cn.tedu.csmall.product.mapper.CategoryMapper;
import cn.tedu.csmall.product.pojo.dto.BrandCategoryAddNewDTO;
import cn.tedu.csmall.product.pojo.entity.BrandCategory;
import cn.tedu.csmall.product.pojo.vo.BrandCategoryStandardVO;
import cn.tedu.csmall.product.service.IBrandCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class BrandCategoryServiceImpl implements IBrandCategoryService {

    @Autowired
    BrandCategoryMapper brandCategoryMapper;
    @Autowired
    BrandMapper brandMapper;
    @Autowired
    CategoryMapper categoryMapper;

    /**
     * 绑定品牌和类类的关联
     * @param brandId
     * @param categoryId
     */
    @Override
    public void bind(Long brandId,Long categoryId) {
        //根据id查询品牌和类别，判断是否存在
        if(brandMapper.countById(brandId)==1&&categoryMapper.countById(categoryId)==1){
            //品牌数据和类别数据都存在
            //根据品牌id和类别id查询品牌类别关联表是否存在该数据
            if(brandCategoryMapper.countByBrandIdAndCategoryId(brandId,categoryId)>0){
                //存在该数据，抛出异常
                String message="添加失败，该对应关系已存在！";
                log.debug("添加失败，该对应关系已存在！");
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }else {
                //如果没有该对应关系，创建品牌类别关联对象
                BrandCategory brandCategory=new BrandCategory();
                brandCategory.setBrandId(brandId);
                brandCategory.setCategoryId(categoryId);
                int rows=brandCategoryMapper.insert(brandCategory);
                //如果受影响行数为1
                if(rows!=1){
                    //抛出异常
                    //存在该数据，抛出异常
                    String message="添加失败，系统繁忙请稍后重试！";
                    log.debug("添加失败，系统繁忙请稍后重试！");
                    throw new ServiceException(ServiceCode.ERR_INSERT,message);
                }
                log.debug("插入成功！");
            }
        }else {
            //如果品牌数据或者类别数据不存在，抛出异常
            String message="添加失败，品牌或者类别不存在！";
            log.debug("添加失败，品牌或者类别不存在！");
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }
    }

    /**
     * 根据id删除一条品牌类别关联数据
     * @param id
     */
    @Override
    public void unbind(Long id) {
        //根据id获取品牌类别关联表VO对象
        BrandCategoryStandardVO brandCategoryStandardVo = brandCategoryMapper.getBrandCategoryStandardVo(id);
        if(brandCategoryStandardVo==null){
            //抛出异常
            String message="删除失败，该数据不存在！";
            log.debug("删除失败，该数据不存在！");
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        //获取品牌id和类别id
        Long brandId=brandCategoryStandardVo.getBrandId();
        Long categoryId=brandCategoryStandardVo.getCategoryId();

        //根据品牌id和类别id查询品牌类别关联表数据数量
        int count=brandCategoryMapper.countByBrandIdAndCategoryId(brandId,categoryId);
        if(count!=1){
            //如果查询到的数据数量不等于1
            //抛出异常
            String message="删除失败，该数据不存在！";
            log.debug("删除失败，该数据不存在！");
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        log.debug("数据存在，准备删除数据！");
        int rows=brandCategoryMapper.deleteById(id);
        //如果受影响行数不等于1
        if(rows!=1){
            String message="删除失败，系统异常，请稍后重试！";
            log.debug("删除失败，系统异常，请稍后重试！");
            throw new ServiceException(ServiceCode.ERR_DELETE,message);
        }
        log.debug("删除成功！");
    }
}
